<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JavaScript</title>
</head>

<body>
  <p>原型</p>
  <script>
    /* 
      原型prototype
        我们所创建的每一个函数，解析器都会向函数中添加一个属性prototype
        这个属性对应着一个对象，这个对象就是原型

        当访问一个对象的属性或方法时会先在对象自身中进行查找如果有直接使用，如果没有则沿着原型链向上查找。
        
        创建构造函数时可以将对象共有的属性和方法同一添加到构造函数的原型对象中。
        这样不用分别对每一个对象进行添加就可以使每个对象都拥有这些属性和方法
    */
    function MyClass() {}
    var mc = new MyClass()
    MyClass.prototype.a='添加属性a'
    console.log('构造函数原型',MyClass.prototype)
    console.log('实例的原型',mc.__proto__)
  </script>
  <!-- 
    1、函数的prototype属性
      * 每个函数都有一个prototype属性，它默认指向一个Object空对象（即称为原型对象）
      * 每个原型对象中有一个constructor，它指向函数对象
    2、给原型对象添加属性（一般都是方法）
      作用：函数的所有实例对象自动拥有原型中的属性（方法）
   -->
   <script>
     console.log(Date.prototype,typeof Date.prototype)
     function fun (){

     }
     fun.prototype.test = function(){
       console.log('test')
     }
     console.log(fun.prototype)
     console.log(Date.prototype.constructor===Date)
   </script>
</body>

</html>